package E_2024;

import java.util.HashMap;
import java.util.Map;

/*
题目描述
    给定一个字符串Qs,找出这样一个子串：
    1.该子串中任意一个字符最多出现2次
    2.该子串不包含指定某个字符
    请你找出满足该条件的最长子串的长度
输入描述
    第一行为：要求不包含的指定字符，为单个字符，取值范围[0-9a-ZA-Z]
    第二行为：字符串s,每个字符范围[0-9a-ZA-Z],长度范围[1,10000]
输出描述
    一个整数，满足条件的最长子串的长度；如果不存在满足条件的子串，则返回0
示例1
    输入
    D
    ABC132
    输出
    6
示例2
    输入
    D
    ABACA123D
    输出
    7
 */
public class E_200_9 {
    public static void main(String[] args) {
        System.out.println(ans('D',"ABC132"));
        System.out.println(ans('D',"ABACA123D"));
        System.out.println(ans('D',"CABACA123D"));
        System.out.println(ans('D',"CABACAD123D"));
        System.out.println(ans('D',"CABDACA123D"));
    }
    public static int ans(char ch, String str){
        int left = 0;
        int right = 0;
        int ans = 0;
        Map<Character,Integer> map = new HashMap<>();
        while(right < str.length()){
            char rch = str.charAt(right);
            Integer rTimes = map.getOrDefault(rch, 0);
            if (rTimes == 2){
                ans = Math.max(ans, right - left);
                char lch = str.charAt(left);
                left++;
                Integer lTimes = map.get(lch);
                map.put(lch,lTimes-1);
            }else if (rch == ch){
                ans = Math.max(ans, right - left);
                map.clear();
                right++;
                left = right;
            }else {
                map.put(rch,rTimes + 1);
                right++;
            }
        }
        ans = Math.max(ans, right - left);
        return ans;
    }
}
